package com.uhomecp.lambda.yinyong2;

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;

public class Car {
    public static Car create(final Supplier<Car> carSupplier){
        return carSupplier.get();
    }

    public static void collide(final Car car){
        System.out.println("collide " + car.toString());
    }

    public void fllow(final Car car){
        System.out.println("fllow " + car.toString());
    }

    public void repair(){
        System.out.println("repair " + this.toString());
    }

    public static void main(String[] args) {
        //构造器引用：它的语法是Class::new，或者更一般的Class< T >::new实例如下：
        final Car car = Car.create(Car::new);
        final List<Car> carList = Arrays.asList(car);
        //静态方法引用：它的语法是Class::static_method，实例如下：
        carList.forEach(Car::collide);
        //特定对象的方法引用：它的语法是instance::method实例如下：
        carList.forEach(car::fllow);
        //特定类的任意对象的方法引用：它的语法是Class::method实例如下：
        carList.forEach(Car::repair);
        //输出
        carList.forEach(System.out::println);
    }
}
